/* 
 * File:   OperacionDescargaArchivo.h
 * Author: maximiliano
 *
 * Created on 16 de junio de 2013, 00:10
 */

#ifndef OPERACIONDESCARGAARCHIVO_H
#define	OPERACIONDESCARGAARCHIVO_H

#include <string>
#include <stdint.h>
#include "client_FileServiceProxy.h"
#include "client_Operacion.h"
#include "common_Repositorio.h"
#include "common_FileUtils.h"

using namespace std;
using namespace TP::Servicios;
using namespace TP::Archivos;

namespace TP { namespace Operaciones {

class OperacionDescargaArchivo : public Operacion {
    
public:

OperacionDescargaArchivo( uint32_t pToken
                        , FileServiceProxy* pFileService
                        , Repositorio* pRepositorio
                        , const string &pNombreArchivo
                        , const uint32_t &pVersionArchivo
                        );

    virtual ~OperacionDescargaArchivo();
    
    virtual void ejecutar();
        
    virtual void procesarRespuesta (vector<string> &pRespuesta);        

private:
    
    void getChunkDelServidor(const uint32_t &pNumeroChunk);
    
    void manejarRespuestaGetChunkDelServidor (vector<string> &pRespuesta);
    
    void GuardarChunkEnArchivo (const string& pNombreArchivo, const string &pChunk);
    
    Repositorio *_repositorio;
    FileServiceProxy *_fileService;
    string _nombreArchivo;
    uint32_t _versionArchivo;
    FileUtils _fileUtils;
};

}}
#endif	/* OPERACIONDESCARGAARCHIVO_H */

